﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.Reporting.WebForms;

using SIBI.Helpers;
using SIBI.Reports;
using SIBI.Models;

namespace SIBI.Reports.CtrlMovimientoBI
{
    public partial class Reporte : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                /// la primera vez
                f_Reporte();
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            f_Reporte();
        }
         // definir Estructura para el Reporte.
        private class LineaCtrlMovimiento : ReportHelper.TipoRepEstructura
        {
            public string BienInformaticoId { get; set; }
            public DateTime? dfmo { get; set; }
            public string ClaseObjeto_cnom { get; set; }
            public string TipoBien_cnom { get; set; }
            public string ctmo { get; set; }
            public string CausaMovimiento_cnom { get; set; }
            public string localidad_nombre { get; set; }
            public string cubf { get; set; }
            public string cobs { get; set; }


        }
        private void f_Reporte()
        {
            // Obtener Parametros
           
                DateTime? fechaMovtod = null;
                DateTime? fechaMovtoh = null;
                DateTime fecha;
                if (DateTime.TryParse(this.txtFechaMovtod.Text, out fecha)) fechaMovtod = fecha;
                if (DateTime.TryParse(this.txtFechaMovtoh.Text, out fecha)) fechaMovtoh = fecha;    
                string lsserial = txtSerial.Text.TrimEnd().ToUpper();
                string lscausa = txtCausa.Text.TrimEnd().ToUpper();
                string lsubicacion = txtUbicacion.Text.TrimEnd().ToUpper();               

                //Crear Datasets que usa el Reporte
                ReportHelper.RepDataSet<string> tblReporte = new ReportHelper.RepDataSet<string>("Reporte", "repNombre");
                ReportHelper.RepDataSet<LineaCtrlMovimiento> tblMovimientos = new ReportHelper.RepDataSet<LineaCtrlMovimiento>("Movimientos");

                tblReporte.Rows.Add(new object[] { "Reporte de Control de Movimientos" });
                // Llenar Datasets con Datos desde el Contexto o Contextos.


                using (SIBIContext db = new SIBIContext())
                {
                   
                    var qbuscar = (from tmovto in db.Movimientoes
                                   where (
                                     (String.IsNullOrEmpty(lsserial) || tmovto.BienInformaticoId.ToUpper().Contains(lsserial))&&
                                    (String.IsNullOrEmpty(lscausa) || tmovto.ctmo.ToUpper().Contains(lscausa)) &&
                                    (String.IsNullOrEmpty(lsubicacion) || tmovto.cubf.ToUpper().Contains(lsubicacion))&&
                                    ((fechaMovtod == null) ||
                                        ((fechaMovtoh == null) && (tmovto.dfmo==fechaMovtod)) ||
                                        ((tmovto.dfmo >= fechaMovtod) && (tmovto.dfmo <= fechaMovtoh))
                                    )
                                  )
                                  select new LineaCtrlMovimiento()
                                  {
                                      BienInformaticoId = tmovto.BienInformaticoId,
                                      dfmo = tmovto.dfmo,
                                      ClaseObjeto_cnom=tmovto.nbin.nmym.ncob.cnom,
                                      TipoBien_cnom = tmovto.nbin.ntib.cnom,
                                      ctmo = tmovto.ctmo,
                                      CausaMovimiento_cnom=tmovto.ctmo,
                                      localidad_nombre=tmovto.nbin.nloc.localidad_nombre,
                                      cubf= tmovto.cubf,
                                      cobs=tmovto.cobs

                                  });
                    
                   foreach (LineaCtrlMovimiento obj in qbuscar) { obj.CopyRow(tblMovimientos, obj); }
                   
                }
        
                ReportViewer1.Reset();
                // Cargar el Reporte en pantalla, con sus parametros.
                ReportHelper.SetReportData(ReportViewer1, "/REP/REP_CtrlMovimientoBI.rdl", "Reporte,Movimientos",
                    new object[] { tblReporte, tblMovimientos }
                    , "repNombre", "Reporte de Control de Movimientos");
            
        }// f_Reporte()
    }
}
